﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DotNet.Practico1.UI.Model;

namespace DotNet.Practico1.UI.Presentation
{
    public interface IMainView
    {
        void LoadFields();
        void UpdateFoundContacts();
        void UpdateFoundAddresses();
        void UpdateFoundPhones();
        void UpdateFoundEmails();
        void UpdateFoundGroups();
        void UpdateContacts();

        void UpdateInfoAddresses();
        void UpdateInfoPhones();
        void UpdateInfoEmails();
        void UpdateInfoGroups();
        int SelectedContactId { get; }
        IEnumerable<UIContact> Contacts { get; set; }
        IEnumerable<TypesDTO> PhoneTypes { get; set; }
        IEnumerable<TypesDTO> EmailTypes { get; set; }
        IEnumerable<TypesDTO> AddressTypes { get; set; }
        IEnumerable<TypesDTO> Groups { get; set; }
        IEnumerable<TypesDTO> ContactGroups { get; set; }
        string SaveCSVFileName { get; }
        bool ShowSearchPanel { set; }
        bool ShowInfoPanel { set; }
        void BoldSearchButton();
        void BoldInfoButton();

        #region Search Parameters
        
        string SearchPhone { get; }
        short SearchPhoneType { get; }
        string SearchFirstName { get; }
        string SearchLastName { get; }
        string SearchEmail { get; }
        short SearchEmailType { get; }
        DateTime SearchStartDate { get; }
        DateTime SearchEndDate { get; }

        #endregion

        #region Search Results
        IEnumerable<UIContact> FoundContacts { get; set; }
        IEnumerable<UIAddress> FoundAddresses { get; set; }
        IEnumerable<UIPhone> FoundPhones { get; set; }
        IEnumerable<UIEmail> FoundEmails { get; set; }
        IEnumerable<UIGroup> FoundGroups { get; set; }

        UIContact FoundContact { get; }
        UIAddress FoundAddress { get; }
        UIPhone FoundPhone { get; }
        UIEmail FoundEmail { get; }
        UIGroup FoundGroup { get; }

        string FoundContactFirstName { set; }
        string FoundContactLastName { set; }
        DateTime FoundContactBirthDate { set; }
        string FoundContactComments { set; }
        byte[] FoundContactImage { set; }

        string FoundAddressStreet { set; }
        string FoundAddressCity { set; }
        string FoundAddressPostalCode { set; }
        string FoundAddressCountry { set; }

        string FoundPhoneNumber { set; }
        string FoundPhoneType { set; }
        string FoundEmailAddress { set; }
        string FoundEmailType { set; }
        string FoundGroupMemberCount { set; }

        #endregion

        #region Edit Information
        int SelectedInfoContactId { get; set; }
        int SelectedGroup { get; set; }
        int SelectedInfoGroup { get; set; }
        IEnumerable<UIContact> InfoContacts { get; set; }
        IEnumerable<UIAddress> InfoAddresses { set; }
        IEnumerable<UIPhone> InfoPhones { set; }
        IEnumerable<UIEmail> InfoEmails { set; }
        IEnumerable<UIGroup> InfoGroups { set; }
        string ImagePath { get; }

        UIAddress InfoAddress { get; }
        UIPhone InfoPhone { get; }
        UIEmail InfoEmail { get; }
        UIGroup InfoGroup { get; }

        string InfoContactFirstName { get; set; }
        string InfoContactLastName { get; set; }
        DateTime InfoContactBirthDate { get; set; }
        string InfoContactComments { get; set; }
        byte[] InfoContactImage { get; set; }

        string InfoAddressStreet { get; set; }
        string InfoAddressCity { get; set; }
        string InfoAddressPostalCode { get; set; }
        string InfoAddressCountry { get; set; }
        short InfoAddressType { get; set; }

        string InfoPhoneNumber { get; set; }
        short InfoPhoneType { get; set; }
        string InfoEmailAddress { get; set; }
        short InfoEmailType { get; set; }
        string InfoGroupMemberCount { set; }
        bool EnableAddressAdd { set; }
        bool EnableAddressModify { set; }
        bool EnableAddressRemove { set; }
        bool EnablePhoneAdd { set; }
        bool EnablePhoneModify { set; }
        bool EnablePhoneRemove { set; }
        bool EnableEmailAdd { set; }
        bool EnableEmailModify { set; }
        bool EnableEmailRemove { set; }
        #endregion
    }
}
